package interfaz;

import javax.swing.JFrame;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;

import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.util.Vector;

import javax.swing.JScrollPane;
import javax.swing.JTextPane;

import excepciones.ContenidoException;
import excepciones.DataStructureException;

import logica.analizador.DocumentoJerarquicoEnlazado;

public class RSemantica extends JFrame implements ActionListener, WindowListener{

	private static final long serialVersionUID = 1L;
	private JMenuBar jJMenuBar = null;
	private JMenu jMenu = null;
	private JMenuItem jMenuItem = null;
	private JMenuItem jMenuItem1 = null;
	private JScrollPane jScrollPane = null;
	private JTextPane jTextPane = null;
	private String texto;
	private JMenuItem jMenuItem2 = null;

	/**
	 * This is the default constructor
	 */
	public RSemantica(String texto) {
		super();
		this.texto=texto;
		initialize();
	}

	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private void initialize() {
		this.setSize(751, 496);
		Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
		double fil=dim.getWidth();
		double col=dim.getHeight();
		fil=(fil-751)/2;
		col=(col-496)/2;
		this.setLocation((int)fil, (int)col);
		this.setResizable(false);
		this.setContentPane(getJScrollPane());
		this.setJMenuBar(getJJMenuBar());
		this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
		this.setTitle("Red Semantica");
		this.addWindowListener(this);
		this.getJTextPane().setText(texto);
		this.getJTextPane().setEditable(false);
	}

	/**
	 * This method initializes jJMenuBar	
	 * 	
	 * @return javax.swing.JMenuBar	
	 */
	private JMenuBar getJJMenuBar() {
		if (jJMenuBar == null) {
			jJMenuBar = new JMenuBar();
			jJMenuBar.add(getJMenu());
		}
		return jJMenuBar;
	}

	/**
	 * This method initializes jMenu	
	 * 	
	 * @return javax.swing.JMenu	
	 */
	private JMenu getJMenu() {
		if (jMenu == null) {
			jMenu = new JMenu();
			jMenu.setText("Opciones");
			jMenu.add(getJMenuItem());
			jMenu.add(getJMenuItem1());
			jMenu.add(getJMenuItem2());
		}
		return jMenu;
	}

	/**
	 * This method initializes jMenuItem	
	 * 	
	 * @return javax.swing.JMenuItem	
	 */
	private JMenuItem getJMenuItem() {
		if (jMenuItem == null) {
			jMenuItem = new JMenuItem();
			jMenuItem.setText("Navegar");
			jMenuItem.addActionListener(this);
		}
		return jMenuItem;
	}

	/**
	 * This method initializes jMenuItem1	
	 * 	
	 * @return javax.swing.JMenuItem	
	 */
	private JMenuItem getJMenuItem1() {
		if (jMenuItem1 == null) {
			jMenuItem1 = new JMenuItem();
			jMenuItem1.setText("Graficar");
			jMenuItem1.addActionListener(this);
		}
		return jMenuItem1;
	}

	/**
	 * This method initializes jScrollPane	
	 * 	
	 * @return javax.swing.JScrollPane	
	 */
	private JScrollPane getJScrollPane() {
		if (jScrollPane == null) {
			jScrollPane = new JScrollPane();
			jScrollPane.setViewportView(getJTextPane());
		}
		return jScrollPane;
	}

	/**
	 * This method initializes jTextPane	
	 * 	
	 * @return javax.swing.JTextPane	
	 */
	private JTextPane getJTextPane() {
		if (jTextPane == null) {
			jTextPane = new JTextPane();
		}
		return jTextPane;
	}

	@SuppressWarnings("unchecked")
	@Override
	public void actionPerformed(ActionEvent arg0) {
		if(arg0.getActionCommand()=="Opciones")
		{
			VerCaminos vc=new VerCaminos(this,this.getJTextPane().getText());
			vc.setModal(true);
			vc.setVisible(true);
		}
		
		if(arg0.getActionCommand()=="Navegar")
		{
			Vector<Object> datos=new Vector<Object>();
			DocumentoJerarquicoEnlazado dJE1;
			
				
			try {
				dJE1 = new DocumentoJerarquicoEnlazado(texto);
				datos= dJE1.getSeccion("");
				Navegacion n=new Navegacion(this,datos,texto,0,0);
				Vector<String> v=dJE1.getTitulos();
				n.setTitle(v.elementAt(0));
				n.setModal(true);
				n.setVisible(true);
				
			} catch (ContenidoException e) {
				JOptionPane.showMessageDialog(this, "Texto con errores de sintaxis", "Atencion!", 2);
			} catch (DataStructureException e) {
				JOptionPane.showMessageDialog(this, "Texto con errores de sintaxis", "Atencion!", 2);
			}
				

		}
		if(arg0.getActionCommand()=="Graficar")
		{
			Grafo g=new Grafo(texto);
			this.setVisible(false);
			g.setVisible(true);
			this.dispose();
		}
	}
	
	/**
	 * funcion que llama al dialogo cuando se cierra una ventana
	 */
	public void windowClosing(WindowEvent arg0) {
		Principal p=new Principal();
		this.setVisible(false);
		p.setVisible(true);
		this.dispose();
	}

	@Override
	public void windowActivated(WindowEvent arg0) {
	}

	@Override
	public void windowClosed(WindowEvent arg0) {
	}

	@Override
	public void windowDeactivated(WindowEvent arg0) {
	}

	@Override
	public void windowDeiconified(WindowEvent arg0) {
	}

	@Override
	public void windowIconified(WindowEvent arg0) {
	}

	@Override
	public void windowOpened(WindowEvent arg0) {
	}

	/**
	 * This method initializes jMenuItem2	
	 * 	
	 * @return javax.swing.JMenuItem	
	 */
	private JMenuItem getJMenuItem2() {
		if (jMenuItem2 == null) {
			jMenuItem2 = new JMenuItem();
			jMenuItem2.setText("Opciones");
			jMenuItem2.addActionListener(this);
		}
		return jMenuItem2;
	}

}  //  @jve:decl-index=0:visual-constraint="10,10"
